package leetcode;

/**
 * @Project : AlgorithmLearning
 * @Package : Leetcode
 * @File : Q0151.java
 * @Author : WangRuoyu
 * @Date 2023/11/9 15:44
 */


public class Q0151 {

    //    public void change(int l, int r, char[] ch) {
//        for (int i = l, j = r; i < j; i++, j--) {
//            char tmp = ch[i];
//            ch[i] = ch[j];
//            ch[j] = tmp;
//        }
//    }
//
//    public String reverseWords(String s) {
//        char[] ch = s.toCharArray();
//        int i = 0, j = ch.length - 1;
//        while (ch[i] == ' ') {
//            i++;
//        }
//        while (ch[j] == ' ') {
//            j--;
//        }
//
//        for (int l = i, r = i; r <= j; r++) {
//            if (r == j) {
//                change(l, r, ch);
//            } else if (ch[r] == ' ') {
//                change(l, r - 1, ch);
//                l = r + 1;
//            }
//        }
//
//        StringBuilder sb = new StringBuilder();
//        for (int k = j; k >= i; k--) {
//            if (k < j && ch[k] == ' ' && ch[k + 1] == ' ') continue;
//            sb.append(ch[k]);
//        }
//
//        return sb.toString();
//    }
    public String reverseWords(String s) {
        StringBuilder sb = new StringBuilder();
        int i = s.length() - 1;
        while (i >= 0 && s.charAt(i) == ' ') i--;
        while (i >= 0) {
            StringBuilder tmp = new StringBuilder();
            while (i >= 0 && s.charAt(i) != ' ') {
                tmp.append(s.charAt(i));
                i--;
            }
            sb.append(tmp.reverse()).append(' ');
            while (i >= 0 && s.charAt(i) == ' ') i--;
        }
        return sb.deleteCharAt(sb.length() - 1).toString();
    }

    public static void main(String[] args) {
        Q0151 sl = new Q0151();
        String s = "  a good   example  ";
        System.out.println(sl.reverseWords(s));
    }
}